package com.taotao.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.pojo.EUDataGridResult;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.util.ArrayUtil;
import com.taotao.common.util.IDUtils;
import com.taotao.mapper.TbItemDescMapper;
import com.taotao.mapper.TbItemMapper;
import com.taotao.mapper.TbItemParamItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemDesc;
import com.taotao.pojo.TbItemDescExample;
import com.taotao.pojo.TbItemExample;
import com.taotao.pojo.TbItemParamItem;
import com.taotao.pojo.TbItemParamItemExample;
import com.taotao.pojo.TbItemExample.Criteria;
import com.taotao.service.ItemService;

/***
 * 商品管理service 实现
 * @author Administrator
 *
 */
@Service
public class ItemServiceImpl implements ItemService{
	
	//注入tapper代理对象
	@Autowired
	private TbItemMapper itemMapper;
	@Autowired
	private TbItemDescMapper itemDescMapper;
	@Autowired
	private TbItemParamItemMapper itemParamItemMapper;//商品规格参数值
	
	@Override
	public TbItem getItemById(long itemId) {
		
		//TbItem item = itemMapper.selectByPrimaryKey(itemId);
		
		//创建 商品管理TbItem的查询条件类TbItemExample,不添加条件是查询所有
		TbItemExample example = new TbItemExample();
		//创建查询条件
		Criteria criteria = example.createCriteria();
		//如同 where id = ? 之后把itemId作为参数
		criteria.andIdEqualTo(itemId);
		List<TbItem> list = itemMapper.selectByExample(example);
		if(list != null && list.size() > 0){
			return list.get(0);
		}
		return null;
	}
	
	
	
	/**
	 * 商品列表查询
	 * <p>Title: getItemList</p>
	 * <p>Description: </p>
	 * @param page
	 * @param rows
	 * @return
	 * @see com.taotao.service.ItemService#getItemList(long, long)
	 */
	@Override
	public EUDataGridResult getItemList(int page, int rows) {
		//查询商品列表
		TbItemExample example = new TbItemExample();
		//分页处理
		PageHelper.startPage(page, rows);
		List<TbItem> list = itemMapper.selectByExample(example);
		//创建一个返回值对象
		EUDataGridResult result = new EUDataGridResult();
		result.setRows(list);
		//取记录总条数
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		result.setTotal(pageInfo.getTotal());
		return result;
	}
	
	
	/**
	 * 添加商品
	 * @param item 商品
	 * @param desc 商品描述
	 * @param itemParams 商品规格参数
	 * @throws Exception
	 */
	@Override
	public TaotaoResult saveItem(TbItem item, String desc,String itemParams) throws Exception {
		//item补全
		//生成商品ID
		Long itemId = IDUtils.genItemId();
		item.setId(itemId);
		// '商品状态，1-正常，2-下架，3-删除',
		item.setStatus((byte) 1);
		item.setCreated(new Date());
		item.setUpdated(new Date());
		//插入到数据库
		itemMapper.insert(item);
		//添加商品描述信息
		TaotaoResult result = insertItemDesc(itemId, desc);
		if (result.getStatus() != 200) {
			throw new Exception();//抛异常事务才能回滚
		}
		//添加商品规格参数
		result =  insertItemParamItem(itemId, itemParams);
		if (result.getStatus() != 200) {
			throw new Exception();//抛异常事务才能回滚
		}
		return TaotaoResult.ok();
	}

	
	
	
	/**
	 * 删除商品
	 * @param ids 
	 * @throws Exception
	 */
	@Override
	public void deleteItemByIds(String ids) {
		//1.将ids转为List<Long> values
		String[] idsArrays = ids.split(",");
		List<Long> idList = ArrayUtil.StringArrayToLongList(idsArrays);
		
		//商品管理的约束条件
		TbItemExample itemExample = new TbItemExample();
		Criteria itemCriteria = itemExample.createCriteria();
		//添加约束
		itemCriteria.andIdIn(idList);
		//删除
		itemMapper.deleteByExample(itemExample);
		
		//商品描述的约束条件
		TbItemDescExample itemDescExample = new TbItemDescExample();
		com.taotao.pojo.TbItemDescExample.Criteria itemDescCriteria = itemDescExample.createCriteria();
		itemDescCriteria.andItemIdIn(idList);
		itemDescMapper.deleteByExample(itemDescExample);
	}
	
	
	/**
	 * 添加商品描述
	 * <p>Title: insertItemDesc</p>
	 * <p>Description: </p>
	 * @param desc
	 */
	private TaotaoResult insertItemDesc(Long itemId, String desc) {
		TbItemDesc itemDesc = new TbItemDesc();
		itemDesc.setItemId(itemId);
		itemDesc.setItemDesc(desc);
		itemDesc.setCreated(new Date());
		itemDesc.setUpdated(new Date());
		itemDescMapper.insert(itemDesc);
		return TaotaoResult.ok();
	}
	
	/***
	 * 添加商品规格参数值
	 * @param itemId 商品id
	 * @param itemParams
	 * @return
	 */
	private TaotaoResult insertItemParamItem(Long itemId,String itemParams){
		//创建pojo对象
		TbItemParamItem itemParamItem  = new TbItemParamItem();
		itemParamItem.setItemId(itemId);
		itemParamItem.setParamData(itemParams);
		itemParamItem.setCreated(new Date());
		itemParamItem.setUpdated(new Date());
		//插入数据
		itemParamItemMapper.insert(itemParamItem);
		return TaotaoResult.ok();
	}

}
